package com.shujia

object Demo03Func01 {
  // 定义一个函数，名为func1，接收一个String类型的参数str，实现将str转成Int类型并+100返回
  def func1(str: String): Int = {
    val ret: Int = str.toInt + 100
    return ret
  }

  /**
   * 函数的省略规则：
   * 1、return语句可以省略，默认以最后一行代码作为返回的结果
   * 2、如果代码只有一行，则花括号可以省略
   * 3、返回值类型可以由返回值进行自动推断，所以也可以省略
   * 4、如果函数没有参数，则括号可以省略
   */
  def func1_1(str: String): Int = {
    str.toInt + 100
  }

  def func1_2(str: String): Int = str.toInt + 100

  def func1_3(str: String) = str.toInt + 100

  // 注意def不能省略，这里定义的是一个函数
  def func1_4 = "100".toInt + 100


  /**
   * def 关键字，声明一个函数
   * main 方法名
   * args 参数名称
   * Array[String] 参数的类型
   * Unit 返回值类型，相当于Java中的void，没有返回值
   * {} 函数体
   *
   */
  def main(args: Array[String]): Unit = {
    // Scala中可以在哪里定义函数？
    // 在class类中可以定义方法，需要通过类的对象进行调用
    // 在object中也可以定义方法，需要通过类对象进行调用
    // 在函数内部也可以定义函数
    def printHello(): Unit = {
      println("Hello")
    }

    printHello()

    println(func1("100"))
    println(func1_1("100"))
    println(func1_2("100"))
    println(func1_3("100"))
    println(func1_4) // 由于func1_4函数没有参数，所以调用时的括号也可以省略

  }

}
